import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEFGroup } from '../defield/ipsdefgroup';
import { IPSDEDQMain } from './ipsdedqmain';
import { IPSDEDataQueryCode } from './ipsdedata-query-code';
import { IPSDEDataQueryInput } from './ipsdedata-query-input';
import { IPSDEDataQueryReturn } from './ipsdedata-query-return';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEDataQuery
 */
export interface IPSDEDataQuery extends IPSDataEntityObject {
  /**
   * 查询代码集合
   *
   * @type {IPSDEDataQueryCode[]}
   */
  getAllPSDEDataQueryCodes(): IPSDEDataQueryCode[] | null;

  /**
   * 查询代码集合
   *
   * @type {IPSDEDataQueryCode[]}
   */
  get allPSDEDataQueryCodes(): IPSDEDataQueryCode[] | null;

  findPSDEDataQueryCode(objKey: any): IPSDEDataQueryCode | null;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 属性组类型
   * @description 值模式 [属性组类型] {FIELDS：指定属性、 FORMITEMS：表单项、 BASEFIELDS：基础属性、 AUDITFIELDS：审计属性 }
   * @type {( string | 'FIELDS' | 'FORMITEMS' | 'BASEFIELDS' | 'AUDITFIELDS')}
   */
  dEFGroupType: string | 'FIELDS' | 'FORMITEMS' | 'BASEFIELDS' | 'AUDITFIELDS';

  /**
   * 子系统扩展
   * @description 值模式 [实体扩展模式] {0：无扩展、 2：子系统功能扩展 }
   * @type {( number | 0 | 2)}
   * @default 0
   */
  extendMode: number | 0 | 2;

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 查询主表对象
   *
   * @type {IPSDEDQMain}
   */
  getPSDEDQMain(): IPSDEDQMain | null;

  /**
   * 查询主表对象
   *
   * @type {IPSDEDQMain}
   */
  get psDEDQMain(): IPSDEDQMain | null;

  /**
   * 查询主表对象（必须存在）
   *
   * @type {IPSDEDQMain}
   */
  getPSDEDQMainMust(): IPSDEDQMain;

  /**
   * 调用输入对象
   *
   * @type {IPSDEDataQueryInput}
   */
  getPSDEDataQueryInput(): IPSDEDataQueryInput | null;

  /**
   * 调用输入对象
   *
   * @type {IPSDEDataQueryInput}
   */
  get psDEDataQueryInput(): IPSDEDataQueryInput | null;

  /**
   * 调用输入对象（必须存在）
   *
   * @type {IPSDEDataQueryInput}
   */
  getPSDEDataQueryInputMust(): IPSDEDataQueryInput;

  /**
   * 调用返回对象
   *
   * @type {IPSDEDataQueryReturn}
   */
  getPSDEDataQueryReturn(): IPSDEDataQueryReturn | null;

  /**
   * 调用返回对象
   *
   * @type {IPSDEDataQueryReturn}
   */
  get psDEDataQueryReturn(): IPSDEDataQueryReturn | null;

  /**
   * 调用返回对象（必须存在）
   *
   * @type {IPSDEDataQueryReturn}
   */
  getPSDEDataQueryReturnMust(): IPSDEDataQueryReturn;

  /**
   * 属性组
   *
   * @type {IPSDEFGroup}
   */
  getPSDEFGroup(): IPSDEFGroup | null;

  /**
   * 属性组
   *
   * @type {IPSDEFGroup}
   */
  get psDEFGroup(): IPSDEFGroup | null;

  /**
   * 属性组（必须存在）
   *
   * @type {IPSDEFGroup}
   */
  getPSDEFGroupMust(): IPSDEFGroup;

  /**
   * 选择列级别
   * @description 值模式 [实体属性视图列级别（带属性组）（带-1）] {-1：默认（全部查询列）、 0：全部数据、 1：2级（无行外数据）、 2：3级（关键数据）、 3：4级（个别字段）、 100：指定属性组 }
   * @type {( number | -1 | 0 | 1 | 2 | 3 | 100)}
   * @default -1
   */
  viewLevel: number | -1 | 0 | 1 | 2 | 3 | 100;

  /**
   * 自定义数据查询
   * @type {boolean}
   * @default false
   */
  customCode: boolean;

  /**
   * 实体默认查询
   * @type {boolean}
   * @default false
   */
  defaultMode: boolean;

  /**
   * 权限使用查询
   * @type {boolean}
   * @default false
   */
  privQuery: boolean;

  /**
   * 默认发布服务
   * @type {boolean}
   * @default false
   */
  pubServiceDefault: boolean;

  /**
   * 从视图查询
   * @type {boolean}
   * @default false
   */
  queryFromView: boolean;
}
